<?xml version="1.0" encoding="UTF-8"?>
<!--
	- DispatcherServlet application context for PetClinic's web tier.
-->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:oxm="http://www.springframework.org/schema/oxm"
       xsi:schemaLocation="http://www.springframework.org/schema/oxm
         http://www.springframework.org/schema/oxm/spring-oxm.xsd
         http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--
    - The ContentNegotiatingViewResolver delegates to the InternalResourceViewResolver and BeanNameViewResolver,
    - and uses the requested media type (determined by the path extension) to pick a matching view. 
    - When the media type is 'text/html', it will delegate to the InternalResourceViewResolver's JstlView, 
    - otherwise to the BeanNameViewResolver.
    -->
    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="contentNegotiationManager" ref="cnManager"/>
        
        <property name="viewResolvers">
        	<list>
        		 <!-- Default viewClass: JSTL view (JSP with html output) -->
			    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
			        <!-- Example: a logical view name of 'vets' is mapped to '/WEB-INF/jsp/vets.jsp' -->
			        <property name="prefix" value="/WEB-INF/jsp/"/>
			        <property name="suffix" value=".jsp"/>
			    </bean>
			
			    <!-- Used here for 'xml' and 'atom' views  -->
			    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
        	</list>
        </property>
    </bean>

    <!-- Simple strategy: only path extension is taken into account -->
    <bean id="cnManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
        <property name="favorPathExtension" value="true"/>
        <property name="ignoreAcceptHeader" value="true"/>
        <property name="defaultContentType" value="text/html"/>
        
        <property name="mediaTypes">
            <map>
                <entry key="html" value="text/html" />
                <entry key="xml" value="application/xml" />
                <entry key="atom" value="application/atom+xml" />
            </map>
        </property>
    </bean>

    <!-- Renders an Atom feed of the visits. Used by the BeanNameViewResolver  -->
    <bean id="vets/vetList.atom" class="org.springframework.samples.petclinic.web.VetsAtomView"/>

    <!-- Renders an XML view. Used by the BeanNameViewResolver  -->
    <bean id="vets/vetList.xml" class="org.springframework.web.servlet.view.xml.MarshallingView">
        <property name="marshaller" ref="marshaller"/>
    </bean>

    <oxm:jaxb2-marshaller id="marshaller">
        <!-- Object-XML mapping declared using annotations in side 'Vets' -->
        <oxm:class-to-be-bound name="org.springframework.samples.petclinic.model.Vets"/>
    </oxm:jaxb2-marshaller>

</beans>
